#include "config.hpp"
#include <yaml-cpp/yaml.h>
#include <boost/log/trivial.hpp>
#include <stdexcept>

namespace net_channel {
namespace client {

Config::Config(const std::string& config_file) {
    parseConfig(config_file);
}

bool Config::parseConfig(const std::string& filepath) {
    try {
        YAML::Node config = YAML::LoadFile(filepath);

        // 解析服务器配置
        server_info_.address = config["server"]["address"].as<std::string>();
        server_info_.port = config["server"]["port"].as<int>();

        // 解析服务列表
        services_.clear();
        for (const auto& service_node : config["services"]) {
            ServiceInfo service;
            service.name = service_node["name"].as<std::string>();
            service.local_address = service_node["local_address"].as<std::string>();
            service.local_port = service_node["local_port"].as<int>();
            service.remote_port = service_node["remote_port"].as<int>();
            service.protocol = service_node["protocol"].as<std::string>();
            services_.push_back(service);
        }

        return true;
    } catch (const YAML::Exception& e) {
        // 处理YAML解析错误
        return false;
    } catch (const std::exception& e) {
        // 处理其他错误
        return false;
    }
}

} // namespace client
} // namespace net_channel